package bio_nio_aio.bio.com_base.file;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

public class TCPServer {
	public static void main(String[] args) throws Exception {

		ServerSocket server = new ServerSocket(8888);

		//让服务器一直处于监听状态（死循环 accept()方法）
		while(true){

			final Socket socket = server.accept();
			/*
			 这里可以使用多线程来提高传输的效率
			 有一个用户上床就开启一个线程完成用户的上传
			 */
			new Thread(new Runnable() {
				@Override
				public void run() {
					try {

						InputStream is = socket.getInputStream();

						File file = new File("E:\\Java_Projrct\\Net\\src\\com\\file\\upload");

						if(!file.exists()) file.mkdir();

						//自定义一个文件的命名规则  域名+毫秒数+随机数+后缀名
						String fileName = "itcast"+System.currentTimeMillis()+new Random().nextInt(999999)+".jpg";

						FileOutputStream fos = new FileOutputStream(file.getAbsolutePath()+"\\"+fileName);

						int len = 0;
						byte[] bytes = new byte[1024];
						while((len = is.read(bytes))!=-1){
							//这里没有办法读取到传来文件的结束标记，因为根本就没有（这就会使得read()方法进入阻塞状态一直死循环）
							fos.write(bytes, 0, len);
						}

						//写入一个返回信息的流
						socket.getOutputStream().write("上传成功！".getBytes());

						fos.close();
						socket.close();


					} catch (Exception e) {
						e.printStackTrace();
					}

				}//Runnable
			}).start();

		}//while

		//server.close();
	}
}